package com.lagou.config;

import com.lagou.pojo.SimpleBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @author Nocturne
 * @date 2021/5/8 14:51
 * @description
 * 无论有无@Configuration注解，都会将@Bean注解的方法的返回值注入IOC容器中，即spring中@Bean是可以单独使用的
 * 加了@Configuration和不加有本质上有什么区别的？
 *     当在配置类中一个@Bean 使用方法的方式引用另一个Bean如果不加@Configuration就会重复加载Bean
 *     如果加了@Configuration  则会在这里创建cglib代理，当调用@Bean方法时会先检测容器中是否存在
 * 见文章 https://www.zhihu.com/question/360254920
 *
 * 注解@ConditionalOnBean：在上下文中必须存在某个bean，才会让当前自动配置类生效
 */
@Configuration
@ConditionalOnBean(ConfigMarker.class)
@EnableConfigurationProperties(SimpleBean.class)
public class MyAutoConfiguration {

	static {
		System.out.println("MyAutoConfiguration init....");
	}

	@Bean
	public SimpleBean simpleBean(){
		return new SimpleBean();
	}

}
